﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Globalization;

namespace Systemet.Views
{
    public partial class Personalkort : UserControl
    {
        private Domain.PersonalController pC;
        private bool isNewEmployee = false;

        public Personalkort()
        {
            InitializeComponent();
            AccessController.Instance.MainView = this;
            IsEditableTbs(false);
            gBPersk.Enabled = AccessController.Instance.KostnadsBudgetUnlocked;
        }
        //Dynamisk uppdatering av DGVvyn
        public void updateDgv(string avdel, string namn, string persNr)
        {
            if (dgvMainPersonal.Focused == false)
            {
                btnAndraAnstalld.Enabled = false;
                clearTbs();
                IsEditableTbs(false);
            }
            pC = new Domain.PersonalController();
            dgvMainPersonal.DataSource = pC.updateMainDgv(avdel, namn, persNr);

        }
        //Trycker på en cell i dgv, visas och hämtas aktuell data
        private void dgvMainPersonal_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            clearTbs();
            isNewEmployee = false;
            IsEditableTbs(false);
            int currentRow = dgvMainPersonal.CurrentCell.RowIndex;


            string persNr = dgvMainPersonal.Rows[currentRow].Cells[0].Value.ToString();

            char[] splitKriterier = new char[] { '-' };
            string[] splitPersNr = persNr.Split(splitKriterier, StringSplitOptions.RemoveEmptyEntries);

            tBPersNr.Text = splitPersNr[0].ToString();
            tBPnr.Text = splitPersNr[1].ToString();
            if (dgvMainPersonal.Rows[currentRow].Cells[1].Value.ToString() != null)
            {
                tBFnamn.Text = dgvMainPersonal.Rows[currentRow].Cells[1].Value.ToString();
            }
            if (dgvMainPersonal.Rows[currentRow].Cells[2].Value.ToString() != null)
            {
                tBEnamn.Text = dgvMainPersonal.Rows[currentRow].Cells[2].Value.ToString();
            }
            if (dgvMainPersonal.Rows[currentRow].Cells[3].Value.ToString() != null)
            {
                tBLön.Text = dgvMainPersonal.Rows[currentRow].Cells[3].Value.ToString();
            }
            if (dgvMainPersonal.Rows[currentRow].Cells[4].Value.ToString() != null)
            {
                tBSyssGrad.Text = dgvMainPersonal.Rows[currentRow].Cells[4].Value.ToString();
            }
            if (dgvMainPersonal.Rows[currentRow].Cells[5].Value.ToString() != null)
            {
                tBVakAvdr.Text = dgvMainPersonal.Rows[currentRow].Cells[5].Value.ToString();
            }
            int syssGrad = int.Parse(tBSyssGrad.Text);
            int vakAvdr = int.Parse(tBVakAvdr.Text);
            tBÅrsArbete.Text = (syssGrad - vakAvdr).ToString();


            pC = new Domain.PersonalController();
            List<Personalavdelning> personalAllokeringar = pC.OnDgvClick(persNr);

            foreach (Personalavdelning pA in personalAllokeringar)
            {
                if (pA.avdelningsnamn.Contains("Adm"))
                {
                    tBAdmin.Text = pA.procentsats.ToString();
                }
                if (pA.avdelningsnamn.Contains("För/mark"))
                {
                    tBFörMark.Text = pA.procentsats.ToString();
                }
                if (pA.avdelningsnamn.Contains("Utv/Förv"))
                {
                    tbUtvFörv.Text = pA.procentsats.ToString();
                }
                if (pA.avdelningsnamn.Contains("Drift"))
                {
                    tbDrift.Text = pA.procentsats.ToString();
                }
            }

            btnAndraAnstalld.Enabled = true;
            btnTaBortAnstalld.Enabled = true;
            btnSpara.Enabled = false;

        }
        //Disponibelt tid
        public void uppdateradisponibelt(int årsArb, int adm, int utvFörv, int drift, int förMark)
        {


            int allokerat = (adm + förMark + utvFörv + drift);

            lDisponibelt.Text = "Disponibelt: " + (årsArb - allokerat).ToString();

        }
        //Clearar textboxes
        public void clearTbs()
        {
            tBAdmin.Text = "0";
            tbDrift.Text = "0";
            tBFörMark.Text = "0";
            tBLön.Text = "0";
            tBFnamn.Text = "";
            tBEnamn.Text = "";
            tBPersNr.Text = "ÅÅMMDD";
            tBPnr.Text = "XXXX";
            tBSyssGrad.Text = "0";
            tbUtvFörv.Text = "0";
            tBVakAvdr.Text = "0";
            tBÅrsArbete.Text = "0";
        }
        //Kan ändra textboxar
        private void IsEditableTbs(bool IsEditable)
        {
            btnTaBortAnstalld.Enabled = IsEditable;
            btnAndraAnstalld.Enabled = IsEditable;
            tBAdmin.Enabled = IsEditable;
            tbDrift.Enabled = IsEditable;
            tBFörMark.Enabled = IsEditable;
            tBLön.Enabled = IsEditable;
            tBFnamn.Enabled = IsEditable;
            tBPersNr.Enabled = isNewEmployee;
            tBPnr.Enabled = isNewEmployee;
            tBEnamn.Enabled = IsEditable;
            tBSyssGrad.Enabled = IsEditable;
            tbUtvFörv.Enabled = IsEditable;
            tBVakAvdr.Enabled = IsEditable;
            //btnSpara.Enabled = IsEditable;
        }

        private void btnNyAnstalld_Click(object sender, EventArgs e)
        {
            btnAndraAnstalld.Enabled = false;
            isNewEmployee = true;
            clearTbs();
            IsEditableTbs(true);
            tBPersNr.Focus();
        }

        private void btnAndraAnstalld_Click(object sender, EventArgs e)
        {
            isNewEmployee = false;
            IsEditableTbs(true);
        }

        private void TbValidation(object sender, EventArgs e)
        {
            if (tBPersNr.Text.Length == 6 && tBPersNr.Focused == true)
            {
                tBPnr.Focus();

            }
            bool Validated = IsValidated(false);
            if (Validated)
            {
                btnSpara.Enabled = true;
            }
            else
            {
                btnSpara.Enabled = false;
            }

        }
        private bool IsValidated(bool saveEmploy)
        {
            //Procent allokeringar på avdelningar
            string adm = tBAdmin.Text;
            string drift = tbDrift.Text;
            string förMark = tBFörMark.Text;
            string utvFörv = tbUtvFörv.Text;

            string lön = tBLön.Text;
            string fnamn = tBFnamn.Text;
            string enamn = tBEnamn.Text;
            string persNr = tBPersNr.Text;
            string pNr = tBPnr.Text;
            string sysGrad = tBSyssGrad.Text;
            string vakAvd = tBVakAvdr.Text;
            if (tBVakAvdr.Text == "")
            {
                vakAvd = "0";
            }
            int number;

            if (int.TryParse(sysGrad, out number) && int.TryParse(vakAvd, out number))
            {
                string arsArb = (int.Parse(sysGrad) - int.Parse(vakAvd)).ToString();
                tBÅrsArbete.Text = arsArb;
            }
            else
            {
                tBÅrsArbete.Text = "0";
            }
            string årsArb = tBÅrsArbete.Text;


            pC = new Domain.PersonalController();
            bool Validated = pC.ValidateNewEmployee(persNr, pNr, fnamn, enamn, lön, sysGrad, vakAvd, årsArb, adm, förMark, drift, utvFörv);
            if (saveEmploy && Validated)
            {
                
                persNr = tBPersNr.Text + "-" + tBPnr.Text;
                pC.CreateEmployeeObject(persNr, fnamn, enamn, lön, sysGrad, vakAvd, adm, förMark, drift, utvFörv, isNewEmployee);
                btnSpara.Enabled = false;
                tBPersNr.Enabled = false;
                tBPnr.Enabled = false;
                tBFnamn.Enabled = false;
                tBEnamn.Enabled = false;
                tBLön.Enabled = false;
                tBSyssGrad.Enabled = false;
                tBVakAvdr.Enabled = false;
                tBÅrsArbete.Enabled = false;
                tBAdmin.Enabled = false;
                tbDrift.Enabled = false;
                tBFörMark.Enabled = false;
                tbUtvFörv.Enabled = false;
                updateDgv("", "", persNr);
            }

            return Validated;
        }

        private void btnSpara_Click(object sender, EventArgs e)
        {
            IsValidated(true);
        }

        private void btnTaBortAnstalld_Click(object sender, EventArgs e)
        {

        }

        private void tBPersNr_Click(object sender, EventArgs e)
        {
            tBPersNr.Text = "";
        }

        private void tBPnr_Click(object sender, EventArgs e)
        {
            tBPnr.Text = "";
        }
        public void ClearTB()
        {
            tBPersNr.Text = "";
            tBPnr.Text = "";
            tBFnamn.Text = "";
            tBEnamn.Text = "";
            tBLön.Text = "";
            tBSyssGrad.Text = "";
            tBVakAvdr.Text = "";
            tBÅrsArbete.Text = "";
            tBAdmin.Text = "";
            tbDrift.Text = "";
            tBFörMark.Text = "";
            tbUtvFörv.Text = "";
        }


        //Error
        private void tBPersNr_Leave(object sender, EventArgs e)
        {

            pC = new Domain.PersonalController();
            if (pC.TryPersnr(tBPersNr.Text) == false)
            {
                eP1.SetError(tBPersNr, "Fel personnummer");
            }

            else
            {
                eP1.SetError(tBPersNr, "");
            }

        }
        //Vakans
        private void sysVakans_Leave(object sender, EventArgs e)
        {
            pC = new Domain.PersonalController();
            if (sender == tBSyssGrad)
            {
                if (tBSyssGrad.Text != "0" || tBSyssGrad.Text != "")
                {

                    if (pC.TrySysVakans(tBSyssGrad.Text) == false)
                    {
                        ePSysgrad.SetError(tBSyssGrad, "Inte mindre än 25 eller högre än 100");
                    }
                    else
                    {
                        ePSysgrad.SetError(tBSyssGrad, "");
                    }
                }
            }
            if (sender == tBVakAvdr)
            {
                if (tBSyssGrad.Text != "0" || tBSyssGrad.Text != "")
                {
                    if (pC.TrySysVakans(tBVakAvdr.Text) == false)
                    {
                        ePVakAvdrag.SetError(tBVakAvdr, "Inte mindre än 25 eller högre än 100");
                    }
                    else
                    {
                        ePVakAvdrag.SetError(tBVakAvdr, "");
                    }

                }
            }

        }
    }
}
